1 : <?php
2 : /*--------------------------------------------------------------------------+
3 : This file is part of eStudy.
4 : common/class.container.inc.php
5 : - Modulgruppe: Framework
6 : - Beschreibung: Eine Klasse um eine dynamische Liste darzustellen.
7 : - Version: 0.2 30/10/05
8 : - Autor(en): Christian Gerhardt <case42@gmx.net>
9 : +---------------------------------------------------------------------------+
10 : This program is free software; you can redistribute it and/or
11 : modify it under the terms of the GNU General Public License
12 : as published by the Free Software Foundation; either version 2
13 : of the License, or any later version.
14 : +---------------------------------------------------------------------------+
15 : This program is distributed in the hope that it will be useful,
16 : but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : GNU General Public License for more details.
19 : You should have received a copy of the GNU General Public License
20 : along with this program; if not, write to the Free Software
21 : Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 : +--------------------------------------------------------------------------*/
23 : /**
24 : * In dieser Datei wird die Klasse Container implementiert.
25 : * @version 0.2 30/10/05
26 : * @author Christian Gerhardt <case42@gmx.net>
27 : * @package eStudy.Framework
28 : * @subpackage automation
29 : */
30 : /**
31 : * Klasse die eine Objektliste implementiert.
32 : * Es werden nur Objekte eines bestimmten bei der Erzeugung angegeben Typs akkumuliert.
33 : * Es besteht die Möglichkeit mit Hilfe von {@link callUserMethod() <b>callUserMethod()</b>} Methoden bei allen Objekten
34 : * in der Liste aufzurufen.<br>
35 : * Mögliche Fehlermeldungen werden in einem {@link $errorString <b>ErrorString</b>} gespeichert und können mit Hilfe
36 : * der Methode {@link getErrorString() <b>getErrorString</b>} ausgelesen werden.
37 : * @package eStudy.Framework
38 : * @subpackage automation
39 : * @author Christian Gerhardt <case42@gmx.net>
40 : * @version 0.1 15/11/03
41 : */
42 : class Container {
43 : /**
44 : * Eine Liste an Objecten im Container
45 : * @access private
46 : * @var array
47 : */
48 : var $objects;
49 : /**
50 : * Der Typ der Objekte die aufgelistet werden sollen.
51 : * @access private
52 : * @var string
53 : */
54 : var $classType;
55 : /**
56 : * Nähere Fehlerbeschreibung zum letzten aufgetreten Fehler.
57 : * @access protected
58 : * @var string
59 : */
60 : var $errorString = '';
61 : /**
62 : * Der Name einer boolschen Funktion, die zurück gibt, ob das Objekt aufgenommen weden soll oder nicht.
63 : * @access protected
64 : * @var string
65 : */
66 : var $criteriaFunction;
67 : /**
68 : * Konstruktor
69 : * @access public
70 : * @param string $classType - Der Name der Klasse von der Objekte akzeptiert werden soll
71 : * @param string $criteriaFunction - Der Name einer boolschen Funktion, die zurück gibt, ob das Objekt aufgenommen weden soll oder nicht.
72 : */
73 : function Container($classType, $criteriaFunction = null) {
74 0 : $this->objects = array();
75 0 : $this->criteriaFunction = $criteriaFunction;
76 0 : if (is_string($classType)) {
77 0 : $this->classType = $classType;
78 0 : } else {
79 0 : $this->classType = false;
80 : }
81 0 : }
82 : /**
83 : * Fügt der Containerliste ein Objekt hinzu.
84 : * Das Objekt muß vom Typ der Klasse sein, die in classType eingestellt ist.
85 : * Falls eine Kriteriumsfunktion angegeben wurde, wird diese
86 : * zunächst aufgerufen, bevor das Objekt in den den Container aufgenommen
87 : * wird.
88 : * @access public
89 : * @param object $object - das hinzuzufügende Objekt
90 : * @return bool
91 : */
92 : function add($object) {
93 0 : if (is_object($object)) {
94 0 : if ($this->classType && is_a($object, $this->classType)) {
95 0 : if ($this->criteriaFunction) {
96 0 : if (method_exists($object, $this->criteriaFunction)) {
97 0 : if (call_user_func_array(array(&$object, $this->criteriaFunction), array())) {
98 0 : $this->objects[] = $object;
99 0 : }
100 0 : }
101 0 : } else {
102 0 : $this->objects[] = $object;
103 : }
104 0 : return true;
105 : } else {
106 0 : $this->errorString = "Objekt nicht vom Typ: ".$this->classType;
107 : }
108 0 : } else {
109 0 : $this->errorString = "Es ist kein Objekt übergeben worden!";
110 : }
111 0 : return false;
112 : }
113 : /**
114 : * Gibt die Anzahl der Objekte in der Liste zurück.
115 : * @access public
116 : * @return integer - die Anzahl der Objekte in der Liste
117 : */
118 : function count() {
119 0 : return count($this->objects);
120 : }
121 : /**
122 : * Gibt das n-te Objekt aus der Liste zurück.
123 : * Die Zählreihenfolge fängt bei 0 an und hört bei Anzahl-1 auf.
124 : * @access public
125 : * @param integer $n - der Index des Objektes das zurückgegeben werden soll
126 : * @return object - das gewählte Objekt
127 : */
128 : function get($n) {
129 0 : if (is_integer($n)) {
130 0 : if ($n < count($this->objects)) {
131 0 : return $this->objects[$n];
132 : } else {
133 0 : $this->errorString = "Index $n out of bound!";
134 : }
135 0 : } else {
136 0 : $this->errorString = "Keine Objekte in der Liste.";
137 : }
138 0 : return null;
139 : }
140 : /**
141 : * Führt eine Methode auf allen Objekten in der Liste aus.
142 : * Die Methode wird auf alle Objekte innerhalb der Liste angewandt die diese
143 : * Methode besitzen, ansonsten wird das Objekt übersprungen. Der Rückgabewert
144 : * sagt nichts darüber aus, ob die Methode erfolgreich angewandt wurde oder nicht.
145 : * Er bedeutet einzig das mit dem korrekten Ausführen der Methode begonnen
146 : * wurde oder nicht.<br>
147 : * Ein <i>false</i> als Rückgabewert ist ein hinweis darauf, das die Objektliste
148 : * leer ist, oder einer der Parameter vom falschen typ ist.<br>
149 : * Auch für Methoden die keine Parameter brauchen, muß <i>$parameter</i> als leeres
150 : * Array gesetzt sein. <br>
151 : * <b>HINWEISS!! </b><br>
152 : * Mögliche Rückgabewerte der Methode gehen Verloren!
153 : * @access public
154 : * @param string $methodName - der Name der Methode die ausgeführt werden soll.
155 : * @param array $parameter - die Parameter der Methode.
156 : * @return bool - ob die übergebenen Parameter richtig waren
157 : */
158 : function callUserMethod($methodName, $parameter) {
159 0 : if (count($this->objects) > 0 and is_string($methodName) and is_array($parameter)) {
160 0 : foreach($this->objects as $obj) {
161 0 : if (method_exists($obj, $methodName)) {
162 0 : call_user_func_array(array(&$obj, $methodName), $parameter);
163 0 : }
164 0 : }
165 0 : return true;
166 : } else {
167 0 : $this->errorString = "Falsche Parameterübergabe!";
168 : }
169 0 : return false;
170 : }
171 : /**
172 : * Gibt den ErrorString zurück.
173 : * Falls kein Fehler aufgetreten ist, wird ein leerer String zurück gegeben.<br>
174 : * Der letzte Fehler wird in Errorstring gespeichert, was bedeutet, das er auch
175 : * <b><i>nach weiterer fehlerfreier Arbeit</i></b> nicht leer sein muß.<br>
176 : * @access public
177 : * @return string - den Errorstring
178 : */
179 : function getErrorString() {
180 0 : return $this->errorString;
181 : }
182 : }
|